// 模拟实现 lodash 中 的curry 方法
const _ = require('lodash')

function getSum (a, b, c) {
    return a + b + c
}
const curried = _.curry(getSum)

console.log(curried(1,2,3))
console.log(curried(1)(2,3))
console.log(curried(1,2)(3))

// 模拟实现
function curry (fn) {
    return function curriedfn (...args) {
        if(args.length < fn.length) {
            return function() {
                return curriedfn(...args.concat(Array.from(arguments)))
            }
        }else {
            return fn(...args)
        }
    }
}

const curried2 = curry(getSum)

console.log(curried2(1,2,3))
console.log(curried2(1)(2,3))
console.log(curried2(1,2)(3))



// 柯里化总结
// 1.柯里化可以让我们给一个函数传递较少的参数得到一个已经记住了 莫些固定参数得新函数
// 2.这是一种对函数参数得缓存（使用到闭包）
// 3.让函数更加灵活，让函数得颗粒更小
// 4.可以把多元函数转化为一元函数，可以组合使得函数产生强大功能
